<?php
//Ultima verificación: 28-10-2014 ; 21-11-2014 ; 20-02-2015
class M_modulo extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener los modulos de una asignatura existentes menos los borrados (-1)
	function buscar($restriccion=null){
		$consulta = $this->db->query("SELECT modulo.*, asignatura.nombre AS asignatura, tipomodulo.nombre AS tipoModulo, turno.nombre AS turno, turno.horaInicio AS horaInicio, tipomodulo.cantModMinSeg AS cantModMinSeg,
											(SELECT espacioescolar.nombre FROM espacioescolar WHERE espacioescolar.idEspacioEscolar=modulo.idEspacioEscolar AND espacioescolar.estado<>-1 LIMIT 1) AS espacioEscolar, 
											DATE_FORMAT(modulo.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											DATE_FORMAT(modulo.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM modulo, tipomodulo, turno, asignatura, division, curso, ciclolectivo
									  WHERE modulo.idTipoModulo=tipomodulo.idTipoModulo AND 
											modulo.idTurno=turno.idTurno AND 
											modulo.idAsignatura=asignatura.idAsignatura AND 
											asignatura.idDivision=division.idDivision AND
											division.idCurso=curso.idCurso AND
											curso.idCicloLectivo=ciclolectivo.idCicloLectivo AND
											modulo.estado<>-1 AND 											
											tipomodulo.estado<>-1 AND
											turno.estado=1 AND
											asignatura.estado=1 AND 
											division.estado=1 AND 
											curso.estado=1 AND 
											ciclolectivo.estado<>-1	$restriccion
									  ORDER BY tipomodulo.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener los modulos activos
	function buscarActivos($restriccion=null, $order=null){
		if($order == null)	$order="tipomodulo.nombre ASC";
		
		$consulta = $this->db->query("SELECT modulo.*, asignatura.nombre AS asignatura, asignatura.colorDeFondo AS colorDeFondo, asignatura.colorDeTexto AS colorDeTexto, tipomodulo.nombre AS tipoModulo, turno.nombre AS turno, turno.horaInicio AS horaInicio, tipomodulo.cantModMinSeg AS cantModMinSeg, curso.nombre AS curso, division.nombre AS division,
											(SELECT espacioescolar.nombre FROM espacioescolar WHERE espacioescolar.idEspacioEscolar=modulo.idEspacioEscolar AND espacioescolar.estado<>-1 LIMIT 1) AS espacioEscolar, 
											DATE_FORMAT(modulo.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											DATE_FORMAT(modulo.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM modulo, tipomodulo, turno, asignatura, division, curso, ciclolectivo
									  WHERE modulo.idTipoModulo=tipomodulo.idTipoModulo AND 
											modulo.idTurno=turno.idTurno AND 
											modulo.idAsignatura=asignatura.idAsignatura AND 
											asignatura.idDivision=division.idDivision AND
											division.idCurso=curso.idCurso AND
											curso.idCicloLectivo=ciclolectivo.idCicloLectivo AND
											modulo.estado=1 AND 											
											tipomodulo.estado<>-1 AND
											turno.estado=1 AND
											asignatura.estado=1 AND 
											division.estado=1 AND 
											curso.estado=1 AND 
											ciclolectivo.estado<>-1	$restriccion
									  ORDER BY ".$order);
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar un modulo
	function eliminar($idModulo=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `modulo`
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `modulo`.`idModulo` = " . $this->db->escape($idModulo) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para crear un modulo
	function crear($idAsignatura=null, $idTipoModulo=null, $idEspacioEscolar=null, $idTurno=null, $sePuedeDividirConRecreo=null, $descripcion=null, $estado=null, $idCreador=null){
		$this->db->query("INSERT INTO `modulo` (`idModulo`,`idAsignatura`,`idTipoModulo`,`idEspacioEscolar`,`idTurno`,`sePuedeDividirConRecreo`,`descripcion`,`fechaCreacion`,`estado`,`idCreador`) VALUES 
										       (NULL,".$this->db->escape($idAsignatura).",".$this->db->escape($idTipoModulo).",".$this->db->escape($idEspacioEscolar).",".$this->db->escape($idTurno).",".$this->db->escape($sePuedeDividirConRecreo).",".$this->db->escape($descripcion).",now(),".$this->db->escape($estado).",".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos devolver un modulo en particular usada generalmente en el formulario de modificar
	function get($idModulo=null, $restriccion=null){
		$consulta = $this->db->query("SELECT modulo.*, asignatura.nombre AS asignatura, tipomodulo.nombre AS tipoModulo, turno.nombre AS turno, asignatura.idDivision,
											 (SELECT espacioescolar.nombre FROM espacioescolar WHERE espacioescolar.idEspacioEscolar=modulo.idEspacioEscolar AND espacioescolar.estado<>-1 LIMIT 1) AS espacioEscolar,
											 DATE_FORMAT(modulo.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											 DATE_FORMAT(modulo.fechaUltimaModificacion,'%d/%m/%Y') AS fechaUltimaModificacionFormateada
									  FROM modulo, asignatura, tipomodulo, turno
									  WHERE modulo.idAsignatura=asignatura.idAsignatura AND
											modulo.idTipoModulo=tipomodulo.idTipoModulo AND
											modulo.idTurno=turno.idTurno AND
											modulo.estado<>-1 AND 
											asignatura.estado<>-1 AND 
											tipomodulo.estado<>-1 AND 
											modulo.idModulo=".$this->db->escape($idModulo)." $restriccion
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver el modulo contiguo a uno en particular usada generalmente en el formulario de modificar
	function getContiguo($idModulo=null, $cant=null, $idAsignatura=null){
		//1
		if($idAsignatura != 0){
			do{
				$idModulo+=$cant;
				$consulta = $this->db->query("SELECT modulo.*
											  FROM modulo
											  WHERE modulo.idModulo=".$this->db->escape($idModulo)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estado=='-1' || $consulta->row()->idAsignatura != $idAsignatura);
		}
		
		return($consulta->row()->idModulo);
	}
	
	//Este metodo se utiliza para modificar un modulo
	function modificar($idModulo=null, $idTipoModulo=null, $idEspacioEscolar=null, $idTurno=null, $diaAsignado=null, $periodoAsignado=null, $sePuedeDividirConRecreo=null, $descripcion=null, $estado=null){
		$consulta = $this->db->query("UPDATE `modulo`
									 SET `idTipoModulo` = ". $this->db->escape($idTipoModulo) .",
										 `idEspacioEscolar` = ". $this->db->escape($idEspacioEscolar) .",
										 `idTurno` = ". $this->db->escape($idTurno) .",
										 `diaAsignado` = ". $this->db->escape($diaAsignado) .",
										 `periodoAsignadoInicio` = ". $this->db->escape($periodoAsignado) .",
										 `sePuedeDividirConRecreo` = ". $this->db->escape($sePuedeDividirConRecreo) .",
										 `descripcion` = ". $this->db->escape($descripcion) .",
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `modulo`.`idModulo` = " . $this->db->escape($idModulo) . " LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>